#pragma once

#include "Render/Shader/GlobalShader.h"

class LocalVertexShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(LocalVertexShader)

	DECLARE_SHADER_END()
};

class LocalFragmentShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(LocalFragmentShader)

	DECLARE_SHADER_END()
};

class PreViewVertexShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(PreViewVertexShader)

	DECLARE_SHADER_END()
};

class PreViewFragmentShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(PreViewFragmentShader)

	DECLARE_SHADER_END()
};

class GBufferVertexShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(GBufferVertexShader)

	DECLARE_SHADER_END()
};

class GBufferFragmentShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(GBufferFragmentShader)

	DECLARE_SHADER_END()
};

class ShadowsRayTraceComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShadowsRayTraceComputeShader)

	DECLARE_SHADER_END()
};

class ShadowsDenoiseResetArgsComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShadowsDenoiseResetArgsComputeShader)

	DECLARE_SHADER_END()
};

class ShadowsTemporalAccumulationComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShadowsTemporalAccumulationComputeShader)

	DECLARE_SHADER_END()
};

class ShadowsDenoiseCopyShadowTilesComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShadowsDenoiseCopyShadowTilesComputeShader)

	DECLARE_SHADER_END()
};

class ShadowsDenoiseAtrousComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShadowsDenoiseAtrousComputeShader)

	DECLARE_SHADER_END()
};

class AoRayTraceComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(AoRayTraceComputeShader)

	DECLARE_SHADER_END()
};

class AoDenoiseResetArgsComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(AoDenoiseResetArgsComputeShader)

	DECLARE_SHADER_END()
};

class AoTemporalAccumulationComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(AoTemporalAccumulationComputeShader)

	DECLARE_SHADER_END()
};

class AoDenoiseBilateralBlurComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(AoDenoiseBilateralBlurComputeShader)

	DECLARE_SHADER_END()
};

class DdgiRayTraceRgenShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiRayTraceRgenShader)

	DECLARE_SHADER_END()
};

class DdgiRayTraceRchitShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiRayTraceRchitShader)

	DECLARE_SHADER_END()
};

class DdgiRayTraceRmissShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiRayTraceRmissShader)

	DECLARE_SHADER_END()
};

class DdgiIrradianceProbeUpdateComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiIrradianceProbeUpdateComputeShader)

	DECLARE_SHADER_END()
};

class DdgiDepthProbeUpdateComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiDepthProbeUpdateComputeShader)

	DECLARE_SHADER_END()
};

class DdgiIrradianceBorderUpdateComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiIrradianceBorderUpdateComputeShader)

	DECLARE_SHADER_END()
};

class DdgiDepthBorderUpdateComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiDepthBorderUpdateComputeShader)

	DECLARE_SHADER_END()
};

class DdgiSampleProbeGridComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(DdgiSampleProbeGridComputeShader)

	DECLARE_SHADER_END()
};

class ShProjectionComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShProjectionComputeShader)

	DECLARE_SHADER_END()
};

class ShAddComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(ShAddComputeShader)

	DECLARE_SHADER_END()
};

class PrefilterComputeShader : public RHIShader
{
	DECLARE_SHADER_BEGIN(PrefilterComputeShader)

	DECLARE_SHADER_END()
};